﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ControleEstoque.Entidades.ControleAtivoDataSetTableAdapters;
using System.Globalization;

namespace ControleEstoque.Entidades
{
	public class ReaderStub : Reader
	{
		public override string Read()
		{
			string[] read = Read(1, 1);
			if (read.Length > 0)
			{
				return read[0];
			}
			else
			{
				return null;
			}
		}

		public override string[] Read(int num, byte antenna)
		{
			AtivoTableAdapter ativoAtapter = new AtivoTableAdapter();
			ControleEstoque.Entidades.ControleAtivoDataSet.AtivoDataTable ativoData = ativoAtapter.GetData();
			Random r = new Random();

			int maxNum = r.Next(num) + 1;

			List<string> toReturn = new List<string>();

			byte[] lote = new byte[4];

			for (int i = 0; i < lote.Length; i++)
			{
				lote[i] = (byte)r.Next(byte.MaxValue + 1);
			}

			for (int i = 0; i < num; i++)
			{
				byte[] bytes = new byte[19];

				if (r.Next(10) > 8)
				{
					bytes[0] = (byte)(r.Next(byte.MaxValue) + 1);
				}
				else
				{
					bytes[0] = 0;
				}

				if (bytes[0] == 0)
				{
					if (r.Next(100) < 0)
					{
						for (int j = 1; j < 5; j++)
						{
							bytes[j] = (byte)r.Next(byte.MaxValue + 1);
						}
					}
					else
					{
						int rowId = r.Next(ativoData.Count);
						uint RFID = uint.Parse(ativoData[rowId].AtivoRFID, NumberStyles.HexNumber);
						for (int j = 4; j > 0; j--)
						{
							bytes[j] = (byte)(RFID % (byte.MaxValue + 1));
							RFID /= (byte.MaxValue + 1);
						}
					}

					Array.Copy(lote, 0, bytes, 5, lote.Length);

					byte[] dataValidade = Encoding.ASCII.GetBytes(DateTime.Now.AddMonths(6).ToString("yyyyMMdd"));

					Array.Copy(dataValidade, 0, bytes, 9, dataValidade.Length);
				}
				else
				{
					for (int j = 1; j < 9; j++)
					{
						bytes[j] = (byte)r.Next(byte.MaxValue + 1);
					}

				}
				Checksum(bytes, 17);
				toReturn.Add(Misc.PrintTag(bytes, bytes.Length));
				if (bytes[0] == 0)
				{
					int copyOfProducts = r.Next(10 > num - i ? num - i : 10);
					for (int j = 0; i < copyOfProducts; j++)
					{
						toReturn.Add(toReturn[i]);
						i++;
					}
				}
			}

			return toReturn.ToArray();
		}

		public override bool Write(string epcn)
		{
			throw new NotImplementedException();
		}

		public override bool Write(string epcn, string password)
		{
			throw new NotImplementedException();
		}
	}
}
